package com.dream.oproject.page;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 分页信息
 * 
 * @author eric
 * @param <T>
 */
public class PageInfo<T> implements Serializable {
	public PageInfo() {
		super();
	}
	
	private static final long serialVersionUID = -193363667787505830L;
	
	/**
	 * 当前页码
	 */
	private int pageNo;
	
	/**
	 * 每页记录数
	 */
	private int pageSize;
	
	/**
	 * 记录总数
	 */
	private int totalData;
	
	/**
	 * 总页数
	 */
	private int totalPage;
	
	private String sortName;
	
	private String sortOrder;

	public String getSortName() {
		return sortName;
	}

	public void setSortName(String sortName) {
		this.sortName = sortName;
	}

	public String getSortOrder() {
		return sortOrder;
	}

	public void setSortOrder(String sortOrder) {
		this.sortOrder = sortOrder;
	}

	/**
	 * 查询参数
	 */
	private Map filter;
	
	public Map getFilter() {
		return filter;
	}

	public void setFilter(Map filter) {
		this.filter = filter;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public void setTotalData(int totalData) {
		this.totalData = totalData;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public void setDatas(List<T> datas) {
		this.datas = datas;
	}

	/**
	 * 页面要显示的列表数据
	 */
	private List<T> datas;
	
	
	/**
	 * 构造器
	 * 
	 * @param pageNo
	 *           当前页码
	 * @param pageSize
	 *           每页记录数
	 * @param totalData
	 *           记录总数
	 * @param datas
	 *           列表数据
	 */
	public PageInfo(int pageNo, int pageSize, int totalData, List<T> datas) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
		this.totalData = totalData;
		
		// 计算总页数
		if (totalData / pageSize == 0) {
			this.totalPage = 1;
		} else if (totalData / pageSize >= 1 && totalData % pageSize == 0) {
			this.totalPage = totalData / pageSize;
		} else if (totalData / pageSize >= 1 && totalData % pageSize != 0) {
			this.totalPage = totalData / pageSize + 1;
		}
		
		this.datas = datas;
	}
	
	public int getTotalData() {
		return totalData;
	}

	public int getTotalPage() {
		if (totalPage <= 0)
			return 1;
		return totalPage;
	}

	public int getPageNo() {
		if (pageNo <= 0)
			return PageConst.DEF_CURRENT_PAGE;
		return pageNo;
	}

	public int getPageSize() {
		if (pageSize <= 0)
			return PageConst.DEF_PAGE_SIZE;
		return pageSize;
	}
	
	public List<T> getDatas() {
		return datas;
	}
}